(define-macro (rewrite-cyl/pure-yexp->syntax cyl-l)
  `(if (pair? ,cyl-l)
       (let* ((cur-cyl (pop ,cyl-l))
	  (cur-typ (nth 3 cur-cyl))
	  (cur-unit (car cur-cyl))
	  )
     ;;(y-or-n "cyl->syntax:cyl-l=~a,cur-cyl=~a,cyl-define-status=~a.cur-typ=~a\n" cyl-l cur-cyl cyl-define-status cur-typ)
     (cond
      ((and (or (eq? cur-typ 'y表达式函数名定义)(eq? cur-typ '函数名y表达式))(pair? cur-unit))
       (let* ((cur-fn (nth 5 cur-cyl))
	      (cur-par-num (nth 6 cur-cyl))
	      (cur-coding-l (find-current-coding-list cur-fn))
	      (cur-coding (if cur-coding-l (cadr cur-coding-l) (append-new-coding cur-fn '函数 cur-par-num)))
	      (cur-coding-typ (if cur-coding-l (car cur-coding-l) #f))
	      )
	 (if cur-coding-l
	     (if (or (eq? cur-coding-typ '系统状语宏)(eq? cur-coding-typ '状语宏))
		   (begin
		     (set! cyl-adverb-value cur-fn)
		     (set-car! (list-tail cur-cyl 3) '状语宏开始)
		     )
		   (set-car! (list-tail cur-cyl 3) 'y表达式调用)
		   )
	     (set-car! (list-tail cur-cyl 3) 'y表达式调用))
	      (tr-list (i e cur-unit 0)
		       (let ((cur-st (nth 3 e))
			    (res #f)
			    )
			(cond
			 ((eq? cur-st '词语)
			  (set-car! (list-tail e 3) '函数名片段)
			  (set-car! (list-tail e 2) cur-coding))
			 ((eq? cur-st '词语参数)
			  (let ((cur-par (nth 0 e))
				(cur-par-coding #f)
				)
			    (set! res (find-current-coding-list cur-par))
			    (if res
				(begin
				  (set-car! (list-tail e 3) (nth 0 res))
				  (set-car! (list-tail e 2) (nth 1 res)))
				(if (eq? cyl-define-status 'func-define)
				  (begin
				    (set! cur-par-coding (append-new-coding cur-par '局部变量 0))
				    (set-car! (list-tail e 3) '局部变量)
				    (set-car! (list-tail e 2) cur-par-coding))
				  (begin
				    (set! cur-par-coding (append-new-coding cur-par '全局变量 0))
				    (set-car! (list-tail e 3) '全局变量)
				    (set-car! (list-tail e 2) cur-par-coding))
				    ))
			    ))
			  )))
	      (push cur-cyl ,cyl-l)
	     
	      ))
      ((and (eq? cur-typ '词语)(string? cur-unit))
       (let ((res (find-current-coding-list cur-unit))
	     )
	 
	   (if res
	       (begin
		 (set-car! (list-tail cur-cyl 3) (nth 0 res))
		 (set-car! (list-tail cur-cyl 2) (nth 1 res)))
	       (cond
		((and (eq? cyl-define-status 'top-level) cyl-sexp-flag)
		 (let* ((cur-fn cur-unit)
			(typ '全局变量)
			(cur-coding (append-new-coding cur-fn typ 0))
			)
		   (set-car! (list-tail cur-cyl 3) typ)
		   (set-car! (list-tail cur-cyl 2) cur-coding)
		  ) 
		 )
		((and (eq? cyl-define-status 'func-define) cyl-sexp-flag)
		 (let* ((cur-fn cur-unit)
			(typ '局部变量)
			(cur-coding (append-new-coding cur-fn typ 0))
			)
		   (set-car! (list-tail cur-cyl 3) typ)
		   (set-car! (list-tail cur-cyl 2) cur-coding)
		  ) 
		 )
		((not cyl-key-symbol)
		 (let* ((cur-fn cur-unit)
			(typ '无参函数)
			(cur-coding (append-new-coding cur-fn typ 0))
			)
		   (set-car! (list-tail cur-cyl 3) typ)
		   (set-car! (list-tail cur-cyl 2) cur-coding)
		   (push (list cur-fn cur-coding '未定义函数 typ cyl-current-define-function-name) cyl-undefined-symbol-list)) 
		 )
		(cyl-key-symbol
		 (let* ((cur-fn cur-unit)
			(typ '符号)
			;;(cur-coding (append-new-coding cur-fn typ 0))
			)
		   (set-car! (list-tail cur-cyl 3) typ)
		   (set-car! (list-tail cur-cyl 2) '())
		   ;;(push (list cur-fn cur-coding '未定义函数 typ cyl-current-define-function-name) cyl-undefined-symbol-list)
		   ) 
		 )
		))
	   (push cur-cyl ,cyl-l)
	   ))
       ((and (eq? cur-typ 'y表达式调用)(pair? cur-unit))
	(let* ((cur-fn (nth 5 cur-cyl))
	      (cur-par-num (nth 6 cur-cyl))
	      (cur-coding-l (find-current-coding-list cur-fn))
	      (cur-coding (if cur-coding-l (cadr cur-coding-l) (append-new-coding cur-fn '函数 cur-par-num)))
	      (cur-coding-typ (if cur-coding-l (car cur-coding-l) #f))
	      )
	 (if cur-coding-l
	     (if (or (eq? cur-coding-typ '系统状语宏)(eq? cur-coding-typ '状语宏))
		 (begin
		   (set-car! (list-tail cur-cyl 3) '状语宏开始)
		   (set! cyl-adverb-value cur-fn)
		   (push cur-cyl ,cyl-l)
		   )
		 (begin
		   (push cur-cyl ,cyl-l)
		   )
		 )
	     (begin
	       (push cur-cyl ,cyl-l)
	       ))))
      (else
       (push cur-cyl ,cyl-l))
      ))))
